#include <iostream>
#include <fstream>
#include "Mano.h"

Mano::Mano( ){
          
}

Mano::Mano( string archivoIN_ , string archivoOUT_ ){
    
    IN = archivoIN_;
            
    OUT = archivoOUT_;
            
}

Mano::~Mano(){
}
        
bool Mano::tocarNotas(){
    
    if(IN.empty() || OUT.empty()) return false;
    
    ifstream archivoIN(IN.data());
    ofstream archivoOUT(OUT.data());
  
    
    if( ! archivoIN )return false;
        else if( ! archivoOUT )return false;
    
    archivoIN >> cantNotas;
    
    if(cantNotas >= 1000000){
        cout << "Cantidad de notas excedida" << endl;
        return false;
    }
    
    else{

        archivoIN >> notaActual;
        
        pulgar = notaActual.absoluta();
        notaMaxima = notaActual.maximaAbsoluta();
    
        for( int i = 1 ; i <= cantNotas ; i++ ){
    
            archivoIN >> notaActual;
        
            if( notaActual < pulgar ){
                
                if( notaActual + 7 >= notaMaxima ){
                    
                    pulgar = notaActual.absoluta();
                    
                }else{
                    
                    archivoOUT << pulgar;
                    pulgar = notaActual.absoluta();
                    notaMaxima = notaActual.maximaAbsoluta();
                                    
                }
                
            }else if( notaMaxima < notaActual ){
                
                            
                if( (pulgar.esB() ? notaActual - 6 : notaActual - 7) <= pulgar ){
                    
                    notaMaxima = notaActual.maximaAbsoluta();
                    
                }else{
                    
                    archivoOUT << pulgar;
                    pulgar = notaActual.absoluta();
                    notaMaxima = notaActual.maximaAbsoluta();
    
                }
                
            }
        
        }
        
        archivoOUT << pulgar;
    }

    return true;

}

bool Mano::tocarNotas( string archivoIN_ , string archivoOUT_){
    IN = archivoIN_; 
    OUT = archivoOUT_;
    
    return this->tocarNotas();
        
}
